package com.ttdevs.ttrss.db;

import java.util.List;

import com.ttdevs.ttrss.bean.Article;
import com.ttdevs.ttrss.bean.Source;

public interface IDBManager {

	/**
	 * 创建分组：先检查分组是否存在，若存在返回失败，若不存在则创建
	 * 
	 * @param name
	 *            分组名称，分组名不可以重名
	 * @return true：创建成功<br>
	 *         false：创建失败，如：分组已经存在
	 */
	public boolean createGroup(String name, String orderKey);

	/**
	 * 删除分组：先将分组中的源移到默认分组，然后删除分组
	 * 
	 * @param name
	 *            分组名称
	 * @return true：删除成功<br>
	 *         false：删除失败：分组不存在（可能性小）
	 */
	public boolean deleteGroup(String name);

	/**
	 * 编辑分组
	 * 
	 * @param oldName
	 *            就分组名称
	 * @param newName
	 *            新分组名称
	 * @return true：修改成功<br>
	 *         false：修改失败：分组不存在（可能性小）
	 */
	public boolean editGroup(String oldName, String newName);

	/**
	 * 查询所有分组
	 * 
	 * @return
	 */
	public List<String> queryAllGroup();

	/**
	 * 添加订阅源
	 * 
	 * @param src
	 * 
	 * @return true：添加成功<br>
	 *         false：添加失败：源地址已经存在
	 */
	public boolean addSource(Source src);

	/**
	 * 更新源，可更新源名称，源所属组，源是否在wifi下自动更新<br>
	 * 源地址不允许更新，要更新删除后添加
	 * 
	 * @param src
	 *            源的url，唯一
	 * @return
	 */
	public boolean editSource(Source src);

	/**
	 * 删除订阅源<br>
	 * 删除订阅源会删除订阅源下的所有文章
	 * 
	 * @param link
	 *            源地址
	 * @return true：删除成功<br>
	 *         false：删除失败：源不存在（可能性小）
	 */
	public boolean deleteSource(String link);

	/**
	 * 查询某个组下面的所有订阅源
	 * 
	 * @param group
	 *            组名
	 * @return
	 */
	public List<Source> querySource(String group);

	/**
	 * 插入文章，暂不提供删除
	 * 
	 * @param articles
	 */
	public boolean insertArticles(List<Article> articles);

	/**
	 * 标记文章，数据库里的值取反
	 * 
	 * @param articleID
	 *            文章id
	 * @param isMark
	 *            是否标记
	 * @return
	 */
	public boolean markArticle(int articleID, boolean isMark);

	/**
	 * 标记文章是否已读，数据库里的值取反
	 * 
	 * @param articleID
	 *            文章id
	 * @param isRead
	 *            是否已读
	 * @return
	 */
	public boolean markArticleRead(int articleID, boolean isRead);

	/**
	 * 删除某源的所有文章
	 * 
	 * @param url
	 *            源的URL
	 * @return
	 */
	public boolean deleteArticles(String url);

	/**
	 * 查询订阅文章
	 * 
	 * @param source
	 * @param articleID
	 * @param pageSize
	 * @return
	 */
	public List<Article> queryArticle(String source, int articleID, int pageSize);
}
